首先我們介紹一下這個APP的功能。
這個APP主要會有的功能如下:
所以以下是這個APP的概念方向
所以首先我們先建立整個基礎。
不囉唆先上code。
import SwiftUI
class UserInput: ObservableObject {
@Published var sum:[Int] = [1]
@Published var summ:[String] = ["1"]
}
struct ContentView: View {
@StateObject var input = UserInput()
var body: some View {
NavigationView{
VStack{
NavigationLink(
destination: a1(),
label: {
Text("點進來計算熱量")
})
NavigationLink(
destination: b1(),
label: {
Text("點進來計查看今日攝取")
})
}
}
.environmentObject(input)
}
}
struct a1: View {
var a = [100,200]
var b = ["中餐","晚餐"]
@State var karl = 0
@State var category = 0
@State var karlsum = 0
@State var categorysum = "0"
@EnvironmentObject var input: UserInput
var body: some View {
VStack{
Picker(selection: $karl, label: Text("請輸入熱量")) {
Text("100").tag(0)
Text("200").tag(1)
}
Picker(selection: $category, label: Text("請輸入類別")) {
Text("中餐").tag(0)
Text("晚餐").tag(1)
}
Button(action: {
karlsum = 0
karlsum = a[karl]
categorysum = "0"
categorysum = b[category]
input.sum.append(karlsum)
input.summ.append(categorysum)
print(input.sum)
print(input.summ)
}) {
Text("確認")
}
}
}
}
struct b1: View {
@EnvironmentObject var input: UserInput
var body: some View {
Text(String(input.sum[1]))
Text(input.summ[1])
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
a1()
b1()
}
}
接下來我會一個個區塊分別細講。
這邊我們要使用昨天教的Passing data。首先用Publish建立兩個Array。
這邊兩個Array分別裝的就是紀錄進去的熱量、類別,這邊底下會用到。
這邊就是我們的主畫面,裡面包含兩個NavigationLink。
要特別注意的是裡面會包含初始化UserInput。最後寫上.environmentObject(input)。
這裡就來到比較複雜了。首先裡面會看到兩個Picker、一個Button,我們把要用值放在a、b兩個array中。
接著就是兩個Piccker包在Vstack裡面。
最下面的Button負責運算把選好的值放進sum、summ裡。把選好的用a、b叫出來,再分別傳送到sum、summ裡。這邊Print出來的用意是為了電腦上做測試時看的,因為我怕沒有加進去array所以把它print出來,這邊非必要。
這邊我們就用@EnvironmentObject把sum、summ去調用出來,在下方顯示出來就可以了!